namespace CSharpPro2._1030;


//课上代码：Demo
public class Demo
{
    private int id;//字段feild

   //Alt+insert添加属性
    public string Name1
    {
        get => Name;
        set => Name = value ?? throw new ArgumentNullException(nameof(value));
    }

    public string Name;

    public int Id
    {
        get => id;
        //get
        //{
        //   return id;
        //}
        set => id = value;  
    }
    
    public void  TestPrint1()
    {
        int result =  Add(10, 20);
        //Add(1.0, 2.0);
        //Convert.ToInt32()
    }

    public int Add(int a, int b)
    {
        return a + b;
    }

    public int Add(int a, int b, int c)
    {
        return a + b + c;
    }

    public static double Add(double a, double b)
    {
        return a + b;
        //return Add(1, 2);
    }

    public static double Add(double a, double b, double c)
    {
        return a + b + c;
    }
    
     //  作业1：抽象类 UserTest 和子类
    
    // 抽象类 UserTest
    public abstract class UserTest
    {
        // 三个抽象方法
        public abstract void M1();
        public abstract void M2();
        public abstract void M3();
    }

    // 子类继承抽象类 UserTest
    public class UserSubClass : UserTest
    {
        // 重写抽象方法 M1
        public override void M1()
        {
            Console.WriteLine("执行 M1 方法 - 用户信息初始化");
        }

        // 重写抽象方法 M2
        public override void M2()
        {
            Console.WriteLine("执行 M2 方法 - 用户数据验证");
        }

        // 重写抽象方法 M3
        public override void M3()
        {
            Console.WriteLine("执行 M3 方法 - 用户权限检查");
        }
    }

    //  作业2：接口 UserService 和实现类 
    
    // 用户服务接口
    public interface IUserService
    {
        // 增加用户
        void AddUser(string user);
        
        // 删除用户
        void DeleteUser(string user);
        
        // 修改用户
        void UpdateUser(string oldUser, string newUser);
        
        // 查询用户
        string QueryUser(string user);
    }

    // 用户服务实现类
    public class UserServiceImpl : IUserService
    {
        private List<string> users = new List<string>();

        // 实现增加用户方法
        public void AddUser(string user)
        {
            users.Add(user);
            Console.WriteLine($"添加用户成功: {user}");
        }

        // 实现删除用户方法
        public void DeleteUser(string user)
        {
            if (users.Remove(user))
            {
                Console.WriteLine($"删除用户成功: {user}");
            }
            else
            {
                Console.WriteLine($"删除用户失败: 用户 {user} 不存在");
            }
        }

        // 实现修改用户方法
        public void UpdateUser(string oldUser, string newUser)
        {
            int index = users.IndexOf(oldUser);
            if (index != -1)
            {
                users[index] = newUser;
                Console.WriteLine($"修改用户成功: {oldUser} -> {newUser}");
            }
            else
            {
                Console.WriteLine($"修改用户失败: 用户 {oldUser} 不存在");
            }
        }

        // 实现查询用户方法
        public string QueryUser(string user)
        {
            if (users.Contains(user))
            {
                Console.WriteLine($"查询到用户: {user}");
                return user;
            }
            else
            {
                Console.WriteLine($"未查询到用户: {user}");
                return null;
            }
        }

        // 显示所有用户（辅助方法）
        public void DisplayAllUsers()
        {
            Console.WriteLine("当前所有用户:");
            foreach (var user in users)
            {
                Console.WriteLine($" - {user}");
            }
            if (users.Count == 0)
            {
                Console.WriteLine("  (无用户)");
            }
        }
    }

    //  演示类，整合两个作业的功能
    public class UserDemo
    {
        private UserTest userTest;
        private IUserService userService;

        public UserDemo()
        {
            userTest = new UserSubClass();
            userService = new UserServiceImpl();
        }

        // 演示抽象类功能
        public void DemonstrateAbstractClass()
        {
            Console.WriteLine(" 作业1：抽象类演示 ");
            userTest.M1();
            userTest.M2();
            userTest.M3();
            Console.WriteLine();
        }

        // 演示接口功能
        public void DemonstrateInterface()
        {
            Console.WriteLine(" 作业2：接口演示 ");
            
            // 添加用户
            userService.AddUser("张三");
            userService.AddUser("李四");
            userService.AddUser("王五");
            
            Console.WriteLine();
            
            // 查询用户
            userService.QueryUser("张三");
            userService.QueryUser("赵六");
            
            Console.WriteLine();
            
            // 修改用户
            userService.UpdateUser("李四", "李四新");
            
            Console.WriteLine();
            
            // 删除用户
            userService.DeleteUser("王五");
            userService.DeleteUser("不存在的用户");
            
            Console.WriteLine();
            
            // 显示最终用户列表
            Console.WriteLine("最终用户列表:");
            if (userService is UserServiceImpl serviceImpl)
            {
                serviceImpl.DisplayAllUsers();
            }
            Console.WriteLine();
        }

        // 综合演示方法
        public void DemonstrateAll()
        {
            Console.WriteLine("====== C# 抽象类和接口综合演示 ======\n");
            
            DemonstrateAbstractClass();
            DemonstrateInterface();
            
            Console.WriteLine("====== 演示结束 ======");
        }
    }
    
    //课上代码：Father
    public abstract class Father
    {
        public virtual void Print()
        {
            Console.WriteLine("Father----------Print");
        }
    
        public abstract void M1();
    }
    
    
    //课上代码：Child
    public class Child : Father
    {
        public override void Print()
        {
            Console.WriteLine("Child----------Print");
        }

        public override void M1()
        {
            Console.WriteLine("Chile----------M1");
        }
    }
    
    //课上代码：Son
    public class Son : Father
    {
        public override void Print()
        {
            Console.WriteLine("Son-----------Print");
        }

        public override void M1()
        {
            Console.WriteLine("Son----------M1");
        }
    }
    
    
    //课上代码：Student
    public class Student
    {
        private string name;
        private string classname;
        private int score;
    
        public string Name
        {
            get { return name; }   
            set { name = value; }  
        }

        public string Classname
        {
            get { return classname; }
            set { classname = value; }
        }

        public int Score
        {
            get { return score; }
            set { score = value; }
        }

        public void PrintStudentInfo()
        {
            Console.WriteLine($"姓名：{Name}");
            Console.WriteLine($"班级：{Classname}");
            Console.WriteLine($"成绩：{Score}");
        }
    }
    public void TestPrint2()
    {
        Console.WriteLine("-----------");
        //Father father1 = new Father();
        //father1.Print();
        Child child = new Child();
        child.Print();
        Father father2 = new Child();
        father2.Print();
        Father father3 = new Son();
        father3.Print();
    }
    
}